﻿// --------------------------------------------------------------------------------------------------------------------
// <copyright file="IObjectService.cs" company="">
//   
// </copyright>
// <summary>
//   The ObjectService interface.
// </summary>
// --------------------------------------------------------------------------------------------------------------------

namespace Libium
{
    /// <summary>
    ///   The ObjectService interface.
    /// </summary>
    public interface IObjectService
    {
        #region Public Methods and Operators

        /// <summary>
        /// The clone.
        /// </summary>
        /// <param name="obj">
        /// The obj. 
        /// </param>
        /// <typeparam name="T">
        /// </typeparam>
        /// <returns>
        /// The <see cref="T"/> . 
        /// </returns>
        T Clone<T>(T obj);

        /// <summary>
        /// The convert.
        /// </summary>
        /// <param name="from">
        /// The from. 
        /// </param>
        /// <typeparam name="FromT">
        /// </typeparam>
        /// <typeparam name="ToT">
        /// </typeparam>
        /// <returns>
        /// The <see cref="ToT"/> . 
        /// </returns>
        ToT Convert<FromT, ToT>(FromT from);

        /// <summary>
        /// The copy to.
        /// </summary>
        /// <param name="from">
        /// The from. 
        /// </param>
        /// <param name="to">
        /// The to. 
        /// </param>
        /// <typeparam name="FromT">
        /// </typeparam>
        /// <typeparam name="ToT">
        /// </typeparam>
        void CopyTo<FromT, ToT>(FromT from, ToT to);

        #endregion
    }
}